package com.biostime.springdraw.common.service;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.transaction.annotation.Transactional;

import com.biostime.springdraw.common.persistence.BaseEntity;
import com.biostime.springdraw.common.utils.StringUtils;
import com.biostime.springdraw.modules.sys.entity.Role;
import com.biostime.springdraw.modules.sys.entity.User;

/**
 * Service基类
 * @author Phil
 * @version 2015-11-13
 */
@Transactional(readOnly = true)
public abstract class BaseService {
	
	/**
	 * 日志对象
	 */
	protected Logger logger = LoggerFactory.getLogger(getClass());
	
	/**
	 * 数据范围过滤（符合业务表字段不同的时候使用，采用exists方法）
	 * @param entity 当前过滤的实体类
	 * @param sqlMapKey sqlMap的键值，例如设置“dsf”时，调用方法：${sqlMap.sdf}
	 * @param centerWheres center表条件，组成：中心表字段=业务表的中心字段
	 * @param userWheres user表条件，组成：用户表字段=业务表的用户字段
	 * @example
	 * 		dataScopeFilter(user, "dsf", "id=a.center_id", "id=a.create_by");
	 */
	public static void dataScopeFilter(BaseEntity<?> entity, String sqlMapKey, String centerWheres, String userWheres) {
		
		User user = entity.getCurrentUser();
		
		// 如果是超级管理员，则不过滤数据
		/*if (user.isAdmin()) {
			return;
		}*/
		
		// 数据范围（0：所有数据；1：所在中心数据；2：仅本人数据；）
		StringBuilder sqlString = new StringBuilder();
		
		// 获取到最大的数据权限范围
		//String roleId = "";
		int dataScopeInteger = 2;
		for (Role r : user.getRoles()){
			int ds = 1;
			if(r.getDataScope() != null){
				ds = Integer.valueOf(r.getDataScope());
			}
			if (ds < dataScopeInteger){
				//roleId = r.getId();
				dataScopeInteger = ds;
			}
		}
		String dataScopeString = String.valueOf(dataScopeInteger);
		
		// 查看所有数据，不需要过滤
		if(Role.DATA_SCOPE_ALL.equals(dataScopeString)){
			return;
		}
		
		// 生成中心权限SQL语句
//		for (String where : StringUtils.split(centerWheres, ",")){
//			if (Role.DATA_SCOPE_CENTER_AND_CHILD.equals(dataScopeString)){
//				// 包括所在中心数据
//				sqlString.append(" AND EXISTS (SELECT 1 FROM QD_CENTER");
//				sqlString.append(" WHERE 1=1");
//				sqlString.append(" AND (id = '" + user.getCenter().getId() + "'");
//				sqlString.append(" OR parent_ids LIKE '" + user.getCenter().getParentIds() + user.getCenter().getId() + ",%')");
//				sqlString.append(" AND " + where +")");
//			}
//		}
		
		// 生成个人权限SQL语句
		for (String where : StringUtils.split(userWheres, ",")){
			if (Role.DATA_SCOPE_SELF.equals(dataScopeString)){
				sqlString.append(" AND EXISTS (SELECT 1 FROM SYS_USER");
				sqlString.append(" WHERE ID='" + user.getId() + "'");
				sqlString.append(" AND " + where + ")");
			}
		}
		
		//System.out.println("dataScopeFilter: " + sqlString.toString());

		// 设置到自定义SQL对象
		entity.getSqlMap().put(sqlMapKey, sqlString.toString());
	}

}
